/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package analiseSintatica.Regras.Expressoes;

import AnaliseLexicaFinal.EstruturaDeDados.LinkToken;
import analiseSemantica.Tipos.TiposSemanticos;
import analiseSintatica.ErroSintaticoException;
import analiseSintatica.Regras.Regra;

import java.util.LinkedList;

/**
 *
 * @author matheus
 * nathy

 */
public class RegraOpIncremento extends Regra {


    protected static Regra instancia;
    protected String estrutura ="'++' | '--'";

    /**
     * Construtor privado necessario ao singleton
     */
    private RegraOpIncremento() {
    }

    /**
     * Retorna a unica instancia dessa classe.
     * @return
     */
    public static RegraOpIncremento getInstance() {
        if (instancia == null) {
            instancia = new RegraOpIncremento();
        }
        return (RegraOpIncremento) instancia;
    }



    /**
     * Analisando o token atual. Essa regra eh bem simples, pois soh tem
     * terminais
     * @param listaTokens
     * @return
     * @throws Exception
     */

	@Override
	public TiposSemanticos analisar(LinkedList<LinkToken> listaTokens)throws ErroSintaticoException {
        
		if(listaContem(RegraOpIncremento.getInstance().getPrimeiro(), listaTokens.getFirst())){
        	listaTokens.removeFirst().getLexema();
        }else{
            ErroSintaticoException e = new ErroSintaticoException();
            e.addErros("Falta Op incremento esperado antes do token " + listaTokens.getFirst().getLexema(), estrutura, listaTokens.getFirst().getLinha());
            throw e;
        }


	return null;
      
	}

    @Override
    protected void setPrimeiro() {
        this.primeiro.add("++");
        this.primeiro.add("--");       
       
    }
}
